import { convertTxtToMock, processLargeTxt, type TxtToMockOptions } from "./txtToMock";
import { mockNovels, mockChapters } from "@/api/mock";
import type { Chapter, Novel } from "@/types";

/**
 * 斗罗大陆数据集成工具
 * 用于将TXT文件转换为符合现有系统格式的Mock数据
 */

// 斗罗大陆的基本信息
const DOULUO_NOVEL_INFO = {
  id: "7",
  title: "斗罗大陆",
  author: "唐家三少",
  authorId: "author7",
};

// 斗罗大陆TXT转换配置
const DOULUO_CONVERT_OPTIONS: TxtToMockOptions = {
  novelId: DOULUO_NOVEL_INFO.id,
  novelTitle: DOULUO_NOVEL_INFO.title,
  freeChapters: 10, // 前10章免费
  vipPrice: 50000, // VIP章节50000书币
};

/**
 * 示例斗罗大陆TXT内容
 */
export const douluoSampleTxt = `
第一章 唐门外门弟子

蓝银草，是最没用的武魂之一，几乎没有任何攻击能力。同时，也是最常见的武魂之一。

唐三今年六岁，先天魂力半级，拥有蓝银草武魂。

在前世，他是唐门的一名外门弟子，因为偷学内门绝学，被逼得跳崖自杀。

第二章 穿越者的第二人生

唐三并不是这个世界的人，他来自另外一个世界，一个没有魂力，没有武魂的世界。

在那个世界中，他是唐门的一名外门弟子。

唐门，是一个有着悠久历史的隐世门派，以制造和使用各种机关暗器而闻名。

第三章 觉醒

"好了，现在开始测试你们的武魂。"素云涛说道。

蓝色的光芒从水晶球中绽放出来，笼罩在唐三身上。

"武魂：蓝银草。先天魂力：十级！"

第四章 双生武魂

就在素云涛准备离开的时候，唐三的左手中突然出现了一柄小锤子。

"双生武魂！"素云涛震惊的叫道。

这柄小锤子通体乌黑，看上去平平无奇，但却散发着一股强大的威压。

第五章 诺丁学院

"欢迎来到诺丁初级魂师学院。"一个和蔼的声音响起。

唐三抬起头，看到一个头发花白的老者正在看着他。

"我是大师，你可以叫我老师。"

第六章 小舞

在诺丁学院的宿舍里，唐三遇到了一个特别的女孩。

她有着一头粉蓝色的长发，一双大眼睛如同会说话一般。

"你好，我叫小舞。"女孩甜甜的说道。

第七章 第一魂环

"想要成为真正的魂师，你需要获得第一个魂环。"大师说道。

"魂环来自魂兽，只有猎杀魂兽，才能获得魂环。"

"你的第一个魂环，我建议选择曼陀罗蛇。"

第八章 星斗大森林

星斗大森林，是大陆上最危险的地方之一。

这里生活着无数的魂兽，从十年的到万年的，应有尽有。

"记住，不要离开我太远。"大师叮嘱道。

第九章 人面魔蛛

就在唐三准备猎杀曼陀罗蛇的时候，一只巨大的蜘蛛出现了。

"这是人面魔蛛！"大师脸色大变。

这只人面魔蛛的年限远超曼陀罗蛇，但它的魂环更适合唐三。

第十章 外附魂骨

击败人面魔蛛后，唐三不仅获得了第一个魂环，还得到了一块外附魂骨。

"外附魂骨：八蛛矛！"

这是一块极其珍贵的魂骨，能够大大增强唐三的战斗力。

第十一章 史莱克学院

离开诺丁学院后，唐三和小舞来到了史莱克学院。

"欢迎来到怪物学院！"一个胖子热情的说道。

"我是马红俊，武魂邪火凤凰。"

第十二章 戴沐白

在史莱克学院，唐三遇到了戴沐白。

"白虎，附体！"戴沐白大喝一声。

金色的光芒闪过，戴沐白变身成为白虎战士。

第十三章 朱竹清

朱竹清是一个冷艳的女孩，武魂是幽冥灵猫。

她和戴沐白有着复杂的关系，两人的武魂能够进行武魂融合技。

"幽冥白虎！"

第十四章 奥斯卡

奥斯卡是史莱克学院的食物系魂师。

"老子有根大香肠！"这是他的魂咒。

虽然魂咒很猥琐，但他制作的香肠能够恢复魂力。

第十五章 宁荣荣

宁荣荣来自七宝琉璃宗，是一个娇生惯养的大小姐。

她的武魂是七宝琉璃塔，是最强的辅助系武魂之一。

"七宝有名，一曰：力！"

第十六章 唐门暗器

在史莱克学院的训练中，唐三开始展现唐门暗器的威力。

含沙射影、暴雨梨花针、诸葛神弩...

这些前世的绝学，在这个世界同样威力巨大。

第十七章 全大陆高级魂师学院精英大赛

史莱克学院决定参加全大陆高级魂师学院精英大赛。

这是魂师界最盛大的赛事，全大陆的年轻魂师都会参加。

"我们的目标是冠军！"

第十八章 苍晖学院

在预选赛中，史莱克学院遇到了苍晖学院。

对方使用了七位一体武魂融合技，威力强大。

但在唐三的紫极魔瞳面前，一切幻境都是虚假的。

第十九章 象甲学院

象甲学院以防御著称，他们的武魂都是钻石猛犸。

"钻石猛犸，防御无敌！"

但唐三的控制系魂技，让他们的防御失去了意义。

第二十章 炽火学院

炽火学院是火属性魂师的聚集地。

"凤凰火线！"火舞的攻击威力巨大。

但史莱克七怪的配合更加默契。

第二十一章 天斗皇家学院

天斗皇家学院是天斗帝国的官方学院，实力强大。

他们的队长独孤雁，武魂是碧磷蛇皇。

"碧磷紫毒！"剧毒的攻击让人防不胜防。

第二十二章 武魂殿战队

在决赛中，史莱克学院遇到了最强的对手——武魂殿战队。

他们的队长胡列娜，武魂是妖狐，拥有魅惑能力。

"这将是最艰难的一战。"

第二十三章 比比东

武魂殿的教皇比比东，是大陆上最强的魂师之一。

她拥有双生武魂，实力深不可测。

"小三，你要小心。"

第二十四章 昊天锤

在关键时刻，唐三觉醒了自己的第二武魂——昊天锤。

"昊天锤，天下第一器武魂！"

巨大的锤子从天而降，威力震撼全场。

第二十五章 海神岛

为了获得更强的力量，唐三等人来到了海神岛。

这里是海魂师的圣地，有着神秘的海神考验。

"欢迎来到海神岛。"

第二十六章 波塞西

波塞西是海神岛的大祭司，实力达到99级。

她给史莱克七怪安排了不同的考验。

"这将是你们成神路上的重要一步。"

第二十七章 深海魔鲸王

在海神考验中，唐三遇到了深海魔鲸王。

这是一只接近百万年的魂兽，实力恐怖。

"想要通过考验，必须击败它。"

第二十八章 海神三叉戟

通过考验后，唐三获得了海神三叉戟。

这是海神的武器，拥有着神级的力量。

"海神三叉戟，认主了！"

第二十九章 修罗神

在最终的考验中，唐三遇到了修罗神。

"你有成神的资质。"修罗神说道。

"但成神路上，充满了艰险。"

第三十章 成神

经过无数的磨难，唐三终于成功继承了修罗神位。

金色的神光笼罩全身，唐三正式成为了神。

"从今以后，我就是修罗神！"
`;

/**
 * 将斗罗大陆TXT内容转换为Mock数据
 */
export function convertDouluoTxtToMock(txtContent: string): Chapter[] {
  return convertTxtToMock(txtContent, DOULUO_CONVERT_OPTIONS);
}

/**
 * 处理大型斗罗大陆TXT文件
 */
export async function processDouluoLargeTxt(file: File): Promise<Chapter[]> {
  return await processLargeTxt(file, DOULUO_CONVERT_OPTIONS);
}

/**
 * 获取当前斗罗大陆的章节数据
 */
export function getCurrentDouluoChapters(): Chapter[] {
  return mockChapters.filter((chapter) => chapter.novelId === DOULUO_NOVEL_INFO.id);
}

/**
 * 更新斗罗大陆的章节数据
 */
export function updateDouluoChapters(newChapters: Chapter[]): void {
  // 移除现有的斗罗大陆章节
  const otherChapters = mockChapters.filter((chapter) => chapter.novelId !== DOULUO_NOVEL_INFO.id);

  // 添加新的章节数据
  mockChapters.length = 0;
  mockChapters.push(...otherChapters, ...newChapters);

  // 更新小说信息
  const douluoNovel = mockNovels.find((novel) => novel.id === DOULUO_NOVEL_INFO.id);
  if (douluoNovel) {
    douluoNovel.chapterCount = newChapters.length;
    douluoNovel.wordCount = newChapters.reduce((total, chapter) => total + chapter.wordCount, 0);
    douluoNovel.lastChapterTitle = newChapters[newChapters.length - 1]?.title || "";
    douluoNovel.lastChapterTime =
      newChapters[newChapters.length - 1]?.updatedAt || new Date().toISOString();
    douluoNovel.updatedAt = new Date().toISOString();
  }
}

/**
 * 从示例TXT生成斗罗大陆章节数据
 */
export function generateDouluoSampleData(): Chapter[] {
  console.log("🚀 开始生成斗罗大陆示例数据...");

  const chapters = convertDouluoTxtToMock(douluoSampleTxt);

  console.log(`✅ 成功生成 ${chapters.length} 章斗罗大陆数据`);
  console.log("📊 数据统计：");
  console.log(`   - 免费章节：${chapters.filter((c) => c.isFree).length} 章`);
  console.log(`   - VIP章节：${chapters.filter((c) => c.isVip).length} 章`);
  console.log(`   - 总字数：${chapters.reduce((total, c) => total + c.wordCount, 0)} 字`);

  return chapters;
}

/**
 * 应用斗罗大陆示例数据到Mock系统
 */
export function applyDouluoSampleData(): void {
  console.log("🔄 正在应用斗罗大陆示例数据到Mock系统...");

  const chapters = generateDouluoSampleData();
  updateDouluoChapters(chapters);

  console.log("✅ 斗罗大陆数据已成功应用到Mock系统！");
  console.log("📝 您现在可以在网站中查看更完整的斗罗大陆章节内容");
}

/**
 * 创建斗罗大陆数据管理界面
 */
export function createDouluoDataManager(): HTMLElement {
  const container = document.createElement("div");
  container.className = "douluo-data-manager";
  container.style.cssText = `
    max-width: 800px;
    margin: 20px auto;
    padding: 20px;
    border: 1px solid #ddd;
    border-radius: 8px;
    background: #fff;
    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
  `;

  container.innerHTML = `
    <h2 style="color: #333; margin-bottom: 20px;">🐉 斗罗大陆数据管理</h2>
    
    <div style="margin-bottom: 20px;">
      <h3>当前数据状态</h3>
      <div id="current-status" style="padding: 10px; background: #f5f5f5; border-radius: 4px;">
        正在加载...
      </div>
    </div>
    
    <div style="margin-bottom: 20px;">
      <h3>TXT文件上传</h3>
      <input type="file" id="douluo-file-input" accept=".txt" style="margin-bottom: 10px;">
      <button id="process-file-btn" style="padding: 8px 16px; background: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer;">
        处理TXT文件
      </button>
    </div>
    
    <div style="margin-bottom: 20px;">
      <h3>示例数据</h3>
      <button id="apply-sample-btn" style="padding: 8px 16px; background: #28a745; color: white; border: none; border-radius: 4px; cursor: pointer; margin-right: 10px;">
        应用示例数据 (30章)
      </button>
      <button id="reset-data-btn" style="padding: 8px 16px; background: #dc3545; color: white; border: none; border-radius: 4px; cursor: pointer;">
        重置为原始数据
      </button>
    </div>
    
    <div id="processing-result" style="margin-top: 20px; padding: 10px; border-radius: 4px; display: none;"></div>
  `;

  // 更新当前状态
  function updateStatus() {
    const statusDiv = container.querySelector("#current-status") as HTMLElement;
    const currentChapters = getCurrentDouluoChapters();

    statusDiv.innerHTML = `
      <p><strong>章节数量：</strong>${currentChapters.length} 章</p>
      <p><strong>免费章节：</strong>${currentChapters.filter((c) => c.isFree).length} 章</p>
      <p><strong>VIP章节：</strong>${currentChapters.filter((c) => c.isVip).length} 章</p>
      <p><strong>总字数：</strong>${currentChapters.reduce((total, c) => total + c.wordCount, 0).toLocaleString()} 字</p>
    `;
  }

  // 显示结果
  function showResult(message: string, type: "success" | "error" | "info" = "info") {
    const resultDiv = container.querySelector("#processing-result") as HTMLElement;
    resultDiv.style.display = "block";
    resultDiv.style.background =
      type === "success" ? "#d4edda" : type === "error" ? "#f8d7da" : "#d1ecf1";
    resultDiv.style.color =
      type === "success" ? "#155724" : type === "error" ? "#721c24" : "#0c5460";
    resultDiv.innerHTML = message;

    setTimeout(() => {
      resultDiv.style.display = "none";
    }, 5000);
  }

  // 绑定事件
  container.querySelector("#process-file-btn")?.addEventListener("click", async () => {
    const fileInput = container.querySelector("#douluo-file-input") as HTMLInputElement;
    const file = fileInput.files?.[0];

    if (!file) {
      showResult("请先选择TXT文件", "error");
      return;
    }

    try {
      showResult("正在处理文件，请稍候...", "info");
      const chapters = await processDouluoLargeTxt(file);
      updateDouluoChapters(chapters);
      updateStatus();
      showResult(`✅ 成功处理文件！生成了 ${chapters.length} 章内容`, "success");
    } catch (error) {
      showResult(`❌ 处理失败：${(error as Error).message}`, "error");
    }
  });

  container.querySelector("#apply-sample-btn")?.addEventListener("click", () => {
    try {
      applyDouluoSampleData();
      updateStatus();
      showResult("✅ 示例数据已成功应用！", "success");
    } catch (error) {
      showResult(`❌ 应用失败：${(error as Error).message}`, "error");
    }
  });

  container.querySelector("#reset-data-btn")?.addEventListener("click", () => {
    if (confirm("确定要重置为原始数据吗？这将清除所有导入的章节数据。")) {
      // 这里可以实现重置逻辑
      location.reload(); // 简单的重新加载页面
    }
  });

  // 初始化状态
  updateStatus();

  return container;
}

/**
 * 导出斗罗大陆数据
 */
export function exportDouluoData(): void {
  const chapters = getCurrentDouluoChapters();
  const dataStr = JSON.stringify(chapters, null, 2);
  const blob = new Blob([dataStr], { type: "application/json" });
  const url = URL.createObjectURL(blob);

  const a = document.createElement("a");
  a.href = url;
  a.download = `douluo-chapters-${new Date().toISOString().split("T")[0]}.json`;
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
  URL.revokeObjectURL(url);

  console.log("✅ 斗罗大陆数据已导出");
}

// 导出主要功能
export default {
  convertDouluoTxtToMock,
  processDouluoLargeTxt,
  getCurrentDouluoChapters,
  updateDouluoChapters,
  generateDouluoSampleData,
  applyDouluoSampleData,
  createDouluoDataManager,
  exportDouluoData,
  douluoSampleTxt,
  DOULUO_NOVEL_INFO,
  DOULUO_CONVERT_OPTIONS,
};
